﻿#region zh-CHS 2006 - 2010 DemoSoft 团队 | en 2006-2010 DemoSoft Team

//     NOTES
// ---------------
//
// This file is a part of the MMOSE(Massively Multiplayer Online Server Engine) for .NET.
//
//                              2006-2010 DemoSoft Team
//
//
// First Version : by H.Q.Cai - mailto:caihuanqing@hotmail.com

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU Lesser General Public License as published
 *   by the Free Software Foundation; either version 2.1 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

#region zh-CHS 包含名字空间 | en Include namespace
using Demo.Mmose.Core.Common;
using System.Collections.Generic;
#endregion


namespace Demo.Mmose.Core.Entity.Suit.Quest
{

    /// <summary>
    /// 
    /// </summary>
    public class QuestObjective
    {

        #region zh-CHS Serial属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private Serial m_Serial = Serial.Zero;
        #endregion
        /// <summary>
        /// 唯一序列号GUID
        /// </summary>
        public Serial Serial
        {
            get { return m_Serial; }
            set { m_Serial = value; }
        }

        #endregion

        #region zh-CHS PreSerial属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private Serial m_PreSerial = Serial.Zero;
        #endregion
        /// <summary>
        /// 上个唯一序列号GUID
        /// </summary>
        public Serial PreSerial
        {
            get { return m_PreSerial; }
            set { m_PreSerial = value; }
        }

        #endregion

        #region zh-CHS NextSerial属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private Serial m_NextSerial = Serial.Zero;
        #endregion
        /// <summary>
        /// 下个唯一序列号GUID
        /// </summary>
        public Serial NextSerial
        {
            get { return m_NextSerial; }
            set { m_NextSerial = value; }
        }

        #endregion

        #region zh-CHS Quest属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private Quest m_Quest = null;
        #endregion
        /// <summary>
        /// 任务的唯一序列号GUID
        /// </summary>
        public Quest Quest
        {
            get { return m_Quest; }
            set { m_Quest = value; }
        }

        #endregion

        #region zh-CHS Owner属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private Unit m_Owner = null;
        #endregion
        /// <summary>
        /// 怪物 或 NPC 的Id
        /// </summary>
        public Unit Owner
        {
            get { return m_Owner; }
            set { m_Owner = value; }
        }

        #endregion

    }

    /// <summary>
    /// 任务道具目标
    /// </summary>
    public class QuestItemObjective : QuestObjective
    {
        #region zh-CHS 枚举 | en Enum
        /// <summary>
        /// 道具类型
        /// </summary>
        public enum QuestItemType
        {
            /// <summary>
            /// 无效果
            /// </summary>
            None = 0x00,
            /// <summary>
            /// 获取道具
            /// </summary>
            Get = 0x01,
            /// <summary>
            /// 设置道具
            /// </summary>
            Set = 0x02,
        }
        #endregion

        #region zh-CHS 共有的类 | en Public Class
        /// <summary>
        /// 任务道具
        /// </summary>
        public class QuestItem
        {
            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private QuestItemType m_QuestItemType = QuestItemType.None;
            #endregion
            /// <summary>
            /// 
            /// </summary>
            public QuestItemType QuestItemType
            {
                get { return m_QuestItemType; }
                set { m_QuestItemType = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_ItemId = 0;
            #endregion
            /// <summary>
            /// 可能是道具的模板Id
            /// </summary>
            public long ItemId
            {
                get { return m_ItemId; }
                set { m_ItemId = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_ItemCount = 0;
            #endregion
            /// <summary>
            /// 道具的数量
            /// </summary>
            public long ItemCount
            {
                get { return m_ItemCount; }
                set { m_ItemCount = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_TalkId = 0;
            #endregion
            /// <summary>
            /// 交谈的Id
            /// </summary>
            public long TalkId
            {
                get { return m_TalkId; }
                set { m_TalkId = value; }
            }
        }
        #endregion

        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_CreatureId = 0;
        #endregion
        /// <summary>
        /// 道具交互的 怪物 或 NPC 的Id
        /// </summary>
        public long CreatureId
        {
            get { return m_CreatureId; }
            set { m_CreatureId = value; }
        }

        /// <summary>
        /// 任务道具的数量
        /// </summary>
        private List<QuestItem> m_QuestItems = new List<QuestItem>();
        public List<QuestItem> QuestItems
        {
            get { return m_QuestItems; }
            set { m_QuestItems = value; }
        }

        #region zh-CHS 私有静态成员变量 | en Private Static Member Variables
        /// <summary>
        /// 
        /// </summary>
        private QuestItem m_QuestItem = new QuestItem();
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public QuestItem Singleton
        {
            get { return m_QuestItem; }
        }

        #endregion
    }



    /// <summary>
    /// 任务生物目标
    /// </summary>
    public class QuestCreatureObjective : QuestObjective
    {
        #region zh-CHS 枚举 | en Enum
        /// <summary>
        /// 生物类型
        /// </summary>
        public enum QuestCreatureType
        {
            /// <summary>
            /// 无效果
            /// </summary>
            None = 0x00,
            /// <summary>
            /// 获取生物
            /// </summary>
            Capture = 0x01,
            /// <summary>
            /// 杀死生物
            /// </summary>
            Kill = 0x02,
        }
        #endregion

        #region zh-CHS 共有的类 | en Public Class
        /// <summary>
        /// 任务生物
        /// </summary>
        public class QuestCreature
        {
            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private QuestCreatureType m_QuestCreatureType = QuestCreatureType.None;
            #endregion
            /// <summary>
            /// 
            /// </summary>
            public QuestCreatureType QuestCreatureType
            {
                get { return m_QuestCreatureType; }
                set { m_QuestCreatureType = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_SpellId = 0;
            #endregion
            /// <summary>
            /// 使用技能的Id
            /// </summary>
            public long SpellId
            {
                get { return m_SpellId; }
                set { m_SpellId = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_CreatureId = 0;
            #endregion
            /// <summary>
            /// 怪物 或 NPC 的Id
            /// </summary>
            public long CreatureId
            {
                get { return m_CreatureId; }
                set { m_CreatureId = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_CreatureCount = 0;
            #endregion
            /// <summary>
            /// 怪物 或 NPC 的数量
            /// </summary>
            public long CreatureCount
            {
                get { return m_CreatureCount; }
                set { m_CreatureCount = value; }
            }
        }
        #endregion

        #region zh-CHS 共有属性 | en Public Properties

        /// <summary>
        /// 任务生物的数量
        /// </summary>
        private List<QuestCreature> m_QuestCreatures = new List<QuestCreature>();
        public List<QuestCreature> QuestCreatures
        {
            get { return m_QuestCreatures; }
            set { m_QuestCreatures = value; }
        }

        #endregion
    }

    /// <summary>
    /// 任务谈话目标
    /// </summary>
    public class QuestTalkObjective : QuestObjective
    {
        #region zh-CHS 枚举 | en Enum
        /// <summary>
        /// 谈话类型
        /// </summary>
        public enum QuestTalkType
        {
            /// <summary>
            /// 无效果
            /// </summary>
            None = 0x00,
            /// <summary>
            /// 仅交谈
            /// </summary>
            OnlyTalk = 0x01,
            /// <summary>
            /// 单选
            /// </summary>
            SingleChoice = 0x02,
            /// <summary>
            /// 多选
            /// </summary>
            MultipleChoice = 0x03,
        }
        #endregion

        #region zh-CHS 共有的类 | en Public Class
        /// <summary>
        /// 任务谈话
        /// </summary>
        public class QuestTalk
        {
            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private QuestTalkType m_QuestTalkType = QuestTalkType.None;
            #endregion
            /// <summary>
            /// 
            /// </summary>
            public QuestTalkType QuestTalkType
            {
                get { return m_QuestTalkType; }
                set { m_QuestTalkType = value; }
            }

            #region zh-CHS 私有成员变量 | en Private Member Variables
            /// <summary>
            /// 
            /// </summary>
            private long m_TalkId = 0;
            #endregion
            /// <summary>
            /// 使用技能的Id
            /// </summary>
            public long TalkId
            {
                get { return m_TalkId; }
                set { m_TalkId = value; }
            }
            
        }
        #endregion

        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_CreatureId = 0;
        #endregion
        /// <summary>
        /// 怪物 或 NPC 的Id
        /// </summary>
        public long CreatureId
        {
            get { return m_CreatureId; }
            set { m_CreatureId = value; }
        }

        /// <summary>
        /// 任务谈话的数量
        /// </summary>
        private List<QuestTalk> m_QuestTalks = new List<QuestTalk>();
        public List<QuestTalk> QuestTalks
        {
            get { return m_QuestTalks; }
            set { m_QuestTalks = value; }
        }

        #region zh-CHS 私有静态成员变量 | en Private Static Member Variables
        /// <summary>
        /// 
        /// </summary>
        private QuestTalk m_QuestTalk = new QuestTalk();
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public QuestTalk Singleton
        {
            get { return m_QuestTalk; }
        }
        #endregion
    }


    /// <summary>
    /// 
    /// </summary>
    public class QuestMoveObjective : QuestObjective
    {
        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_MapId = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long MapId
        {
            get { return m_MapId; }
            set { m_MapId = value; }
        }

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private Point4D m_Point4D = Point4D.Zero;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public Point4D Point4D
        {
            get { return m_Point4D; }
            set { m_Point4D = value; }
        }

        #endregion
    }

    /// <summary>
    /// 
    /// </summary>
    public class QuestRewardObjective : QuestObjective
    {
        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_QuestRewardId = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long QuestRewardId
        {
            get { return m_QuestRewardId; }
            set { m_QuestRewardId = value; }
        }

        #endregion
    }

    /// <summary>
    /// 
    /// </summary>
    public class QuestGameobjectObjective : QuestObjective
    {
        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_SpellId = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long SpellId
        {
            get { return m_SpellId; }
            set { m_SpellId = value; }
        }

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_GameobjectId = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long GameobjectId
        {
            get { return m_GameobjectId; }
            set { m_GameobjectId = value; }
        }

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_GameobjectCount = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long GameobjectCount
        {
            get { return m_GameobjectCount; }
            set { m_GameobjectCount = value; }
        }

        #endregion
    }

    /// <summary>
    /// 
    /// </summary>
    public class QuestSpellObjective : QuestObjective
    {
        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_SpellId = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long SpellId
        {
            get { return m_SpellId; }
            set { m_SpellId = value; }
        }

        #endregion
    }

    /// <summary>
    /// 
    /// </summary>
    public class QuestSourceObjective : QuestObjective
    {
        #region zh-CHS 共有属性 | en Public Properties

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_SourceId = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long SourceId
        {
            get { return m_SourceId; }
            set { m_SourceId = value; }
        }

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_SourceCount = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long SourceCount
        {
            get { return m_SourceCount; }
            set { m_SourceCount = value; }
        }

        #region zh-CHS 私有成员变量 | en Private Member Variables
        /// <summary>
        /// 
        /// </summary>
        private long m_SourceRef = 0;
        #endregion
        /// <summary>
        /// 
        /// </summary>
        public long SourceRef
        {
            get { return m_SourceRef; }
            set { m_SourceRef = value; }
        }

        #endregion
    }
}
#endregion